package org.example.ai04.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;

import java.util.Arrays;

/**
 * CORS（跨域资源共享）配置类
 * 用于配置应用程序的跨域请求处理策略
 * 在微服务架构或前后端分离项目中，允许前端应用从不同域名访问后端API
 */
@Configuration
public class CorsConfig {

    /**
     * 创建CORS配置源Bean
     * 该Bean会被Spring Security自动识别并应用到安全过滤器链中
     * @return CorsConfigurationSource实例
     */
    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        // 创建CORS配置对象
        CorsConfiguration configuration = new CorsConfiguration();
        // 设置允许的源模式，"*"表示允许所有源
        configuration.setAllowedOriginPatterns(Arrays.asList("*"));
        // 设置允许的HTTP方法
        configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS"));
        // 设置允许的请求头
        configuration.setAllowedHeaders(Arrays.asList("*"));
        // 允许发送凭证（如Cookie）
        configuration.setAllowCredentials(true);
        
        // 创建基于URL的CORS配置源
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 将CORS配置应用到所有路径
        source.registerCorsConfiguration("/**", configuration);
        
        return source;
    }
}